/*
* INSANE - Interactive Structural Analysis Environment
*
* Copyright (C) 2003-2005
* Universidade Federal de Minas Gerais
* Escola de Engenharia
* Departamento de Engenharia de Estruturas
* 
* Author's email :    insane@dees.ufmg.br
* Author's website :  http://www.dees.ufmg.br/insane
* 
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or any later version.
* 
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
* 
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*/
package br.ufmg.dees.insane.solution;

import br.ufmg.dees.insane.util.IVector;

/**
 * @author jamile
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class UpdateOrthogonalArcLengthControl extends ArcLengthControl {
    
    public UpdateOrthogonalArcLengthControl() {
    }
		
	/**
	 * @param loadFactor
	 */
	public UpdateOrthogonalArcLengthControl(double loadFactor) {
		super(loadFactor);
	}

	/* (non-Javadoc)
	 * @see br.ufmg.dees.insane.solution.IteractiveStrategy#getCorrector()
	 */
	public double getCorrector() {
		lambda = - incX.dot(step.getUnbalancedX()) / incX.dot(step.getXP());
		IVector aux2 = new IVector (step.getAssembler().getSizeOfXu());
    	IVector aux3 = new IVector (step.getAssembler().getSizeOfXu());
    	aux2.scale(lambda,step.getXP());
    	aux3.add(aux2, step.getUnbalancedX());
    	incX.add(incX, aux3);    	
		return lambda;
	}

}
